/** 其他格式转化为条件数据 */
const deepClone = require('clone')
/** 云风表单格式转化为条件数据
 * @param {formDesc} 表单配置信息
 * @param {formEngineBuiltInNames} 控件对应 如果控件类型在此类型中存在 则需要加上 yf- 标识
 * @param {excludeCompnentTypes} 这个数组中存在的控件类型会被过滤掉  有默认数据 可以不传
 */
const formDescConversion = function (formDesc, formEngineBuiltInNames, excludeCompnentTypes, topPage, expandConditionList) {
  if (!excludeCompnentTypes) {
    excludeCompnentTypes = ['dbcq-batch-code', 'serial-number', 'file-upload', 'image-upload', 'yf-calculation', 'yf-editable-list', 'form-group', 'form-panel', 'divider', 'draggle-panel', 'tabs']
  }

  let formItems = []
  for (const key in formDesc) {
    const filed = deepClone(formDesc[key])
    // 排除 过滤的控件 || 是否做为条件判断
    if (excludeCompnentTypes.includes(filed.type) || !filed?.operators?.length > 0) {
      continue
    }
    const item = {}
    // 文本
    item.label = filed.label
    // 下拉选的的值
    item.value = filed.field
    // 数据类型
    item.dataType = filed.dataType
    // 控件信息
    item.controlInfo = {
      // 控件类型
      type: formEngineBuiltInNames.includes(filed.type) ? 'yf-' + filed.type : filed.type,
      // 控件数据源
      options: filed.options
    }

    // 添加attrs属性
    item.controlInfo.desc = {}
    item.controlInfo.desc._attrs = filed.attrs

    // 应要求添加表单域 的参数
    if (item.controlInfo.type == 'yf-textarea') {
      if (!item.controlInfo.desc._attrs) {
        item.controlInfo.desc._attrs = {}
      }
      item.controlInfo.desc._attrs.rows = 1
    }
    /** 中间逻辑信息 */
    item.condition = []
    for (const k2 in filed.operators) {
      const operator = filed.operators[k2]
      if (k2 == 'remove' || operator instanceof Function || !operator.label || !operator.value) {
        continue
      }
      const obj = {
        label: operator.label,
        value: operator.value,
        component: operator?.component || null
      }
      item.condition.push(obj)
    }
    formItems.push(item)
  }
  // 处理一下排序
  if (topPage && topPage.formDescOrder instanceof Array) {
    formItems = formItems.sort((a, b) => topPage.formDescOrder.indexOf(a.value) - topPage.formDescOrder.indexOf(b.value))
  }
  let expand = [
    {
      'label': '提交人机构',
      'value': 'unit',
      'dataType': 'unit',
      'controlInfo': {
        'type': 'yf-selectUnit-multiple'
      },
      'condition': [
        {
          'label': '属于',
          'value': 'like'
        },
        {
          'label': '不属于',
          'value': 'notlike'
        }
      ]
    },
    {
      'label': '提交人',
      'value': 'user',
      'dataType': 'user',
      'controlInfo': {
        'type': 'yf-selectUser-multiple'
      },
      'condition': [
        {
          'label': '属于',
          'value': 'like'
        },
        {
          'label': '不属于',
          'value': 'notlike'
        }
      ]
    },
    {
      'label': '提交人角色',
      'value': 'role',
      'dataType': 'role',
      'controlInfo': {
        'type': 'yf-select-role'
      },
      'condition': [
        {
          'label': '属于',
          'value': 'like'
        },
        {
          'label': '不属于',
          'value': 'notlike'
        }
      ]
    }
  ]
  if (expandConditionList) {
    expand = expandConditionList
  }
  /** 拼接最终数据 */
  const result = [
    {
      groupName: '业务字段',
      groupId: '0',
      conditionList: formItems
    },
    {
      groupName: '用户信息',
      groupId: '7',
      conditionList: expand
    }
  ]
  if (topPage?.showConditionCustom) {
    result.push(
      {
        groupName: '自定义',
        groupId: '14',
        conditionList: [
          {
            label: '自定义',
            value: '-1',
            condition: [],
            controlInfo: {
              type: 'yf-input',
              placeholder: '请输入内容',
              disabled: false
            }
          }
        ]
      }
    )
  }
  return result
}

export default {
  // 云风表单格式转化为条件数据
  formDescConversion
}